package nio;

import java.io.FileNotFoundException;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.Arrays;

/**
 * @author chenyuan
 * @date 2020/11/2 15:24
 */
public class MappedByteBufferTest {
	/* 说明
	1. MappedByteBuffer 可以让文件直接在内存中修改，这样操作系统并不需要拷贝一次
	2. MappedByteBuffer 实际类型是 DirectByteBuffer
	 */
	public static void main(String[] args) throws Exception {
		RandomAccessFile randomAccessFile = new RandomAccessFile("D:\\file01.txt", "rw");
		// 获取对应的文件通道
		FileChannel channel = randomAccessFile.getChannel();
		// 参数 ：使用 只读/只写/读写 模式 ； 可以修改的起始位置 ； 映射到内存的大小，即可以将文件的多少个字节映射到内存
		// 这里就表示，可以对 file01.txt 文件中 [0,5) 的字节进行 读写操作
		MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_WRITE, 0, 5);
		// 读取数据
		System.out.println(new String(new byte[]{map.get(1)}));
		// 进行修改操作
		map.put(0, (byte) 'A');
		map.put(3, (byte) '3');
		// 关闭通道
		channel.close();
	}
}
